/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.mindbox.mueblesalpes.presentacion.promociones;

import com.mindbox.mueblesalpes.negocio.entity.Mueble;
import com.mindbox.mueblesalpes.negocio.entity.Promocion2X1;
import com.mindbox.mueblesalpes.negocio.persistence.ListadoProductosLocal;
import com.mindbox.mueblesalpes.negocio.promocion.PromocionServiceLocal;
import com.mindbox.mueblesalpes.presentacion.utils.Mensajes;
import com.mindbox.mueblesalpes.presentacion.utils.UtilidadesImages;
import java.util.Date;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.context.FacesContext;

/**
 * Clase para manejar las promociones.
 * @author jsanchez
 */

public class PromocionesBean {

    @EJB
    private ListadoProductosLocal listadoProductos;
    @EJB
    private PromocionServiceLocal promocionService;
    private Mueble muebleSeleccionado;
    private List<Mueble> muebles;
    private Date fechaInicio;
    private Date fechaFin;
    private boolean mostrarCrear;

    /** Creates a new instance of PromocionesBean */
    public PromocionesBean() {
        this.setMostrarCrear(true);
    }

    /**
     * Inicializa el Backing BEan de las promociones
     */
    @PostConstruct
    public void init(){
        this.muebles = this.listadoProductos.obtenerProductosParaLaVenta();
        UtilidadesImages.agregarFotos(FacesContext.getCurrentInstance(),
                UtilidadesImages.getBeanImageFromMuebles(getMuebles()));
        this.setMostrarCrear(true);
    }

    /**
     * Get the value of muebleSeleccionado
     *
     * @return the value of muebleSeleccionado
     */
    public Mueble getMuebleSeleccionado() {
        return muebleSeleccionado;
    }

    /**
     * Set the value of muebleSeleccionado
     *
     * @param muebleSeleccionado new value of muebleSeleccionado
     */
    public void setMuebleSeleccionado(Mueble muebleSeleccionado) {
        this.muebleSeleccionado = muebleSeleccionado;
    }

    /**
     * Obtiene los muebles que se encuentran disponibles.
     * @return
     */
    public List<Mueble> getMuebles() {
        return this.muebles;
    }

    /**
     * Acción para crear promocion
     * @return
     */
    public String crearPromocion(){
        if(muebleSeleccionado == null)
            Mensajes.asignarMensajeError("promociones.errorMueble");
        else if(fechaInicio == null)
            Mensajes.asignarMensajeError("promociones.fechaInicioError");
        else if(fechaFin == null)
            Mensajes.asignarMensajeError("promociones.fechaFinError");
        else{
            try{
                this.promocionService.crearPromocion(
                        new Promocion2X1(muebleSeleccionado,fechaInicio,fechaFin));
                iniciarParametros();
                this.setMostrarCrear(false);
                Mensajes.asignarMensajeInfo("promociones.crear");
            }catch(Exception e){
                Mensajes.asignarMensajeError(e.getMessage());
            }
        }
        return null;
    }

    /**
     * Accion para cancelar la Promoción.
     * @return
     */
    public String cancelarPromocion(){
        iniciarParametros();
        this.setMostrarCrear(true);
        return null;
    }

    /**
     * Iniciar parametros seleccionados.
     */
    private void iniciarParametros(){
        this.setMuebleSeleccionado(null);
        this.fechaFin = null;
        this.fechaInicio = null;
    }

    /**
     * Get the value of fechaInicio
     *
     * @return the value of fechaInicio
     */
    public Date getFechaInicio() {
        return fechaInicio;
    }

    /**
     * Set the value of fechaInicio
     *
     * @param fechaInicio new value of fechaInicio
     */
    public void setFechaInicio(Date fechaInicio) {
        this.fechaInicio = fechaInicio;
    }
    /**
     * Get the value of fechaFin
     *
     * @return the value of fechaFin
     */
    public Date getFechaFin() {
        return fechaFin;
    }

    /**
     * Set the value of fechaFin
     *
     * @param fechaFin new value of fechaFin
     */
    public void setFechaFin(Date fechaFin) {
        this.fechaFin = fechaFin;
    }

    /**
     * Get the value of mostrarCrear
     *
     * @return the value of mostrarCrear
     */
    public boolean isMostrarCrear() {
        return mostrarCrear;
    }

    /**
     * Set the value of mostrarCrear
     *
     * @param mostrarCrear new value of mostrarCrear
     */
    public void setMostrarCrear(boolean mostrarCrear) {
        this.mostrarCrear = mostrarCrear;
    }

}